package com.ddxz.middleground.master.mapper;

import com.ddxz.middleground.master.dto.MasterHeader;
import com.ddxz.middleground.master.entity.UserEntity;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

/**
 * interface description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/7/27
 */

@Mapper
@Repository
public interface UserMapper {
    /**
     * 统计指定部门下的员工人数
     *
     * @param deptId 部门标识
     * @param tenant 租户信息
     * @return 员工人数
     */
    Integer getNumByDeptId(@Param("deptId") String deptId, @Param("tenant") String tenant);

    /**
     * 统计指定登陆名称在系统中出现的次数
     *
     * @param username 登陆名
     * @param tenant   租户信息
     * @return 登陆名出现次数
     */
    Integer getNumByName(@Param("username") String username, @Param("tenant") String tenant);

    /**
     * 保存用户信息
     *
     * @param entity 用户信息
     * @param tenant 租户信息
     * @return 是否保存成功
     */
    Integer saveUser(@Param("entity") UserEntity entity, @Param("tenant") String tenant);

    /**
     * 修改用户信息
     *
     * @param entity 用户信息
     * @param tenant 租户信息
     * @return 是否修改成功
     */
    Integer modifyUser(@Param("entity") UserEntity entity, @Param("tenant") String tenant);

    /**
     * 根据用户标识获取用户信息
     *
     * @param userId 用户标识
     * @param tenant 租户信息
     * @return 用户信息
     */
    UserEntity getUserById(@Param("userId") String userId, @Param("tenant") String tenant);

    /**
     * 用户修改自己的密码
     *
     * @param user   用户信息
     * @param tenant 租户信息
     * @return 是否修改成功
     */
    Integer changePassword(@Param("entity") UserEntity user, @Param("tenant") String tenant);

    /**
     * 按照部门和关键字分页检索用户信息
     *
     * @param deptId  部门标识
     * @param tenant  租户信息
     * @param keyword 检索关键字
     * @return 角色清单
     */
    Page<UserEntity> getUserByDeptId(@Param("deptId") String deptId, @Param("tenant") String tenant,
                                     @Param("kw") String keyword);

    /**
     * 移除用户
     *
     * @param userId 用户标识
     * @param tenant 租户信息
     * @return 是否移除成功
     */
    Integer removeUser(@Param("userId") String userId, @Param("tenant") String tenant);

    /**
     * 根据用户登录名获取用户信息
     *
     * @param username 用户登录名
     * @param tenant   租户信息
     * @return 用户信息
     */
    UserEntity getUserByName(@Param("username") String username, @Param("tenant") String tenant);
}
